﻿using System;
using System.Runtime.InteropServices;

namespace WindowsAPI.PE
{
    /// <summary>IMAGE_FILE_HEADER</summary>
    [Serializable]
    [StructLayout(LayoutKind.Sequential, Pack = 1)]
    public struct IMAGE_FILE_HEADER
    {
        /// <summary>Тип рабочей платформы</summary>
        public readonly IMAGE_FILE_MACHINE Machine;
        /// <summary>
        /// Показывает сколько секций содержится в таблице секций. 
        /// Таблица секций непосредственно следует за структурой IMAGE_NT_HEADERS
        /// </summary>
        public readonly ushort NumberOfSections;
        /// <summary>
        /// Содержит время создания файла. Это значение - это количество секунд от 1 января 1970 по гринвичу. 
        /// Это значение более точный индикатор времени создания, чем время файловой системы.
        /// </summary>
        public readonly uint TimeDateStamp;
        /// <summary>
        /// Смещение таблицы симоволов COFF, описываемой в пункте 5.4 спецификации Microsoft.
        /// Таблица символов COFF относительно редка в PE-файлах, представляющая новый фаормат отладочной информации.
        /// Значение = 0 говорит об отсутствии таблицы.
        /// </summary>
        public readonly uint PointerToSymbolTable;
        /// <summary>
        /// Количество символов в таблице COFF, если она пристутствует. 
        /// Символы таблицы COFF - фиксированные структуры, и это поле необходимо для определения конца таблицы COFF.
        /// </summary>
        public readonly uint NumberOfSymbols;
        /// <summary>
        /// Размер опционального заголовка с данными, следующими за IMAGE_FILE_HEADER.
        /// This size is different depending on whether it's a 32 or 64-bit file. 
        /// For 32-bit PE files, this field is usually 224. For 64-bit PE32+ files, it's usually 240. 
        /// However, these sizes are just minimum values, and larger values could appear.
        /// </summary>
        public readonly ushort SizeOfOptionalHeader;
        /// <summary>Набор битовых флагов, отражающих атрибуты файла</summary>
        public readonly ImageCharacteristicsType Characteristics;
    }
}
